---
id: mongodb
title: 10.3. MongoDB 操作
sidebar_label: 10.3. MongoDB 操作
---

:::tip 查看最新拓展文档

[https://gitee.com/dotnetchina/Furion/pulls/423](https://gitee.com/dotnetchina/Furion/pulls/423)

:::

## 10.3.1 关于 MongoDB

`MongoDB` 是一个基于分布式文件存储的数据库。由 `C++` 语言编写。旨在为 `WEB` 应用提供可扩展的高性能数据存储解决方案。

`MongoDB` 是一个介于关系数据库和非关系数据库之间的产品，是非关系数据库当中功能最丰富，最像关系数据库的。

## 10.3.2 如何集成

在 `Furion` 框架中，已经推出 `MongoDB` 拓展包 [Furion.Extras.DatabaseAccessor.MongoDB](https://www.nuget.org/packages/Furion.Extras.DatabaseAccessor.MongoDB)。

### 10.3.2.1 注册 `MongoDB` 服务

使用非常简单，只需要在 `Startup.cs` 中添加 `services.AddMongoDB(connectionString)` 即可。如：

```cs
// 方式一
services.AddMongoDB("mongodb://localhost:27017");

// 方式二
services.AddMongoDB(new MongoClientSettings {});

// 方式三
services.AddMongoDB(new MongoUrl {});
```

## 10.3.3 基本使用

在使用之前，我们可以通过构造函数注入 `IMongoDBRepository` 接口，如：

- 非泛型版本

```cs
private readonly IMongoDBRepository _mongoRepository;
public PersonService(IMongoDBRepository mongoRepository)
{
    _mongoRepository = mongoRepository;
}
```

### 10.3.3.1 常见例子

```cs
var database = _mongoRepository.Context.GetDatabase("foo");
var collection = database.GetCollection<BsonDocument>("bar");

await collection.InsertOneAsync(new BsonDocument("Name", "Jack"));

var list = await collection.Find(new BsonDocument("Name", "Jack"))
    .ToListAsync();

foreach(var document in list)
{
    Console.WriteLine(document["Name"]);
}
```

```cs
public class Person
{
    public ObjectId Id { get; set; }
    public string Name { get; set; }
}

var database = _mongoRepository.Context.GetDatabase("foo");
var collection = database.GetCollection<Person>("bar");

await collection.InsertOneAsync(new Person { Name = "Jack" });

var list = await collection.Find(x => x.Name == "Jack")
                           .ToListAsync();

foreach(var person in list)
{
    Console.WriteLine(person.Name);
}
```

### 10.3.3.2 获取 `MongoClient` 对象

`IMongoDBRepository` 只封装了 `MongoDB` 基础功能，如需获取更多操作可通过 `.Context` 属性获取 `MongoClient` 对象，如：

```cs
var client = _mongoRepository.Context;
```

## 10.3.4 反馈与建议

:::note 与我们交流

给 Furion 提 [Issue](https://gitee.com/dotnetchina/Furion/issues/new?issue)。

:::

---

:::note 了解更多

想了解更多 `MongoDB` 知识可查阅 [MongoDB 仓库](https://hub.fastgit.org/mongodb/mongo-csharp-driver)。

:::
